package zhongbo.java.air.monitor.model;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;

import javax.validation.constraints.*;
import java.util.Date;
import java.io.Serializable;

/**
 * 警戒区域配置表(AirAlertZone)实体类
 *
 * @author makejava
 * @since 2025-03-31 14:06:00
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("air_alert_zone")
@ApiModel("警戒区信息")
public class AirAlertZone implements Serializable {
    /**
     * UUID 主键
     */
    @TableId(type = IdType.ASSIGN_UUID)
    @ApiModelProperty(value = "UUID",example = "1")
    @NotNull(message = "UUID不能为空")
    @Size(min = 1, max = 36, message = "UUID长度应在1到36个字符之间")
    private String id;
    /**
     * 区域业务编号（如 BJ_NOFLY_001）
     */
    @ApiModelProperty(value = "区域业务编号",example = "BJ_NOFLY_001")
    @NotNull(message = "区域业务编号不能为空")
    @Size(min = 1, max = 20, message = "区域业务编号长度应在1到20个字符之间")
    @Pattern(regexp = "^[A-Z]{2}_[A-Z]+_\\d{3}$", message = "区域业务编号格式不正确")
    private String zoneCode;
    /**
     * 区域类型（枚举值：NO_FLY-禁飞区, RESTRICTED-限制区, TEMPORARY-临时区）
     */
    @ApiModelProperty(value = "区域类型",example = "RESTRICTED")
    @NotNull(message = "区域类型不能为空")
    @Size(min = 1, max = 20, message = "区域类型长度应在1到20个字符之间")
    @Pattern(regexp = "^(NO_FLY|RESTRICTED|TEMPORARY)$", message = "区域类型必须是 NO_FLY, RESTRICTED 或 TEMPORARY")
    private String zoneType;
    /**
     * 多边形顶点坐标（JSON格式：[{"lat":39.9,"lng":116.3},...]）
     */
    @ApiModelProperty(value = "多边形顶点坐标",example ="lat\":39.9,\"lng\":116.3" )
    @NotNull(message = "多边形顶点坐标不能为空")
    private String vertices;
    /**
     * 生效开始时间
     */
    @ApiModelProperty(value = "生效开始时间",example = "2025-03-31 15:19:25")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    @NotNull(message = "生效开始时间不能为空")
    @Future(message = "生效开始时间必须在未来")
    private Date effectiveStart;
    /**
     * 生效结束时间（NULL表示永久有效）
     */
    @ApiModelProperty(value = "生效结束时间",example = "2025-04-11 15:19:25")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    @Future(message = "生效结束时间必须在未来")
    private Date effectiveEnd;
    /**
     * 创建时间
     */
    @ApiModelProperty(value = "创建时间",example = "2025-03-31 15:19:25")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    @NotNull(message = "创建时间不能为空")
    @PastOrPresent(message = "创建时间必须是过去或现在")
    private Date createTime;
    /**
     * 更新时间
     */
    @ApiModelProperty(value = "更新时间",example = "2025-04-11 15:19:25")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    @NotNull(message = "更新时间不能为空")
    @PastOrPresent(message = "更新时间必须是过去或现在")
    private Date updateTime;

}


